const STORAGE_KEY = 'shopping_cart';

// 从本地存储加载购物车
function loadCart() {
  try {
    const cart = wx.getStorageSync(STORAGE_KEY);
    return cart || [];
  } catch (e) {
    return [];
  }
}

// 保存购物车到本地存储
function saveCart(cart) {
  try {
    wx.setStorageSync(STORAGE_KEY, cart);
  } catch (e) {
    console.error('保存购物车失败:', e);
  }
}

module.exports = {
  // 添加商品到购物车
  addToCart(product) {
    const cart = loadCart();
    const itemIndex = cart.findIndex(item => item.id === product.id);
    
    if (itemIndex > -1) {
      // 商品已在购物车中，增加数量
      cart[itemIndex].quantity += 1;
    } else {
      // 新商品，添加到购物车
      cart.push({
        id: product.id,
        name: product.name,
        price: product.price,
        image: product.image,
        quantity: 1
      });
    }
    
    saveCart(cart);
    return cart;
  },

  // 增加商品数量
  increaseQuantity(productId) {
    const cart = loadCart();
    const itemIndex = cart.findIndex(item => item.id === productId);
    
    if (itemIndex > -1) {
      cart[itemIndex].quantity += 1;
      saveCart(cart);
    }
    
    return cart;
  },

  // 减少商品数量
  decreaseQuantity(productId) {
    const cart = loadCart();
    const itemIndex = cart.findIndex(item => item.id === productId);
    
    if (itemIndex > -1) {
      if (cart[itemIndex].quantity > 1) {
        cart[itemIndex].quantity -= 1;
      } else {
        // 数量为1时，减少则删除商品
        cart.splice(itemIndex, 1);
      }
      
      saveCart(cart);
    }
    
    return cart;
  },

  // 从购物车删除商品
  removeFromCart(productId) {
    const cart = loadCart().filter(item => item.id !== productId);
    saveCart(cart);
    return cart;
  },

  // 获取购物车所有商品
  getCart() {
    return loadCart();
  },

  // 计算购物车总价
  getTotalPrice() {
    const cart = loadCart();
    return cart.reduce((total, item) => total + (item.price * item.quantity), 0);
  },

  // 获取购物车商品总数
  getTotalQuantity() {
    const cart = loadCart();
    return cart.reduce((total, item) => total + item.quantity, 0);
  },

  // 清空购物车
  clearCart() {
    saveCart([]);
    return [];
  }
};